package ar.pegasus.clasificador.dao.api;

import java.util.List;

import ar.pegasus.clasificador.dao.api.local.LocalidadDAOLocal;
import ar.pegasus.clasificador.entidades.Localidad;
import ar.pegasus.clasificador.entidades.Seccion;
import ar.pegasus.clasificador.excepciones.LocalidadMalFormadaException;
import ar.pegasus.clasificador.util.BeanFactoryClasificadorLocal;
import ar.pegasus.framework.componentes.PException;
import ar.pegasus.framework.manager.BeanFactoryGeneralLocal;


public class LocalidadManager {

	LocalidadDAOLocal localidadDAO;
	
	private static LocalidadManager instance;

	public static LocalidadManager getInstance() throws PException {
		if (instance == null) {
			instance = new LocalidadManager();
		}
		return instance;
	}
		
	private LocalidadManager() throws PException{
		localidadDAO = BeanFactoryClasificadorLocal.getInstance().getBean(LocalidadDAOLocal.class);
	}

	public List<Localidad> getLocalidades() {
		return localidadDAO.getAll();
	}

	/**
	 * Se encarga de buscar la la localidad dentro de la seccion dada y retornar el circuito. 
	 * 
	 * @param seccion
	 * @param nombreLocalidad
	 * @return
	 * @throws PException
	 */
	public String buscarLocalidad(Seccion seccion, String nombreLocalidad) throws PException,LocalidadMalFormadaException {
		return localidadDAO.buscarLocalidad(nombreLocalidad, seccion.getIdSeccion());
	}

	public boolean perteneceALocalidad(int idLocalidadBuscada, int idLocalidad) {
		Localidad localidadBuscada = localidadDAO.getById(idLocalidadBuscada);
		Localidad localidad = localidadDAO.getById(idLocalidad);
		
		while(localidad != null && !localidadBuscada.equals(localidad) ){
			localidad = localidad.getLocalidadPrincipal();
		}
		return localidadBuscada.equals(localidad);
	
		// si el cod de la localidad es el del corriente o el de su padre retorno OK
//		while ( buscado != cod_local && buscado != idLocalidadPadre && idLocalidadPadre != 0 ){
//		  SELECT localidad.cod_loc,   
//		         localidad.localidad_principal  
//		    INTO :cod_local,   
//		         :cod_parent  
//		    FROM localidad  
//		   WHERE localidad.seccion = :seccion  AND
//					localidad.cod_loc = :idLocalidadPadre ;
//		}
//		return ( ( idLocalidadBuscada == idLocalidad ) || (idLocalidadBuscada == idLocalidadPadre ) );
	}
}
